Existential Type
code:swift
func f(arg1:T):I1{
/* ... */
}
返される関数の戻り値の型は、インタフェースI1を型の上界とする。 つまり、関数fから返されるインスタンスはI1を実装していなければならない。
code:swift
var x:I1 = S()
実行中xの型は任意のI1実装型(any I1)をとり得る。 Opaque Typeの場合、実行中xの型はある一つの定まったI1実装型(some I1/exist I1)をとり得る。 しかしインスタンスに入れたせいでメモリやアクセス等にオーバーヘッドがある 参照